Generally, software applications, services, instructions and any type of program code may be developed and/or executed in a number of development environments. While an application is running, the application may fail, may produce unexpected results or the developer may simply wish to inspect different states of the application (either while the developer is working on the software code or has already completed the software code), thus a need to debug the application may arise. The application may be debugged in a number of ways such as manually parsing through each line of the code, testing the code for circumstances that produce errors, using debugging applications and so on.
Conventional debugging applications suspend an application at selected places in its programming in order to observe various execution states of the application. This type of debugging application may be useful in a number of computing environments, including computing environments that use threads to execute applications. It may also be appropriate to use different types of debugging applications in different types of computing environments. A debugging application may be the most appropriate debugging tool for one type of computing environment, but the debugging application may also function correctly in a number of different computing environments.
Debugging applications may function correctly in a hosted development environment, but may not be practical due to some of the general hosted development environment characteristics. For example, in a hosted development environment it is possible for a number of developers to simultaneously develop and/or debug their applications. However, a limited number of threads may be available in the hosted development environment and the number of developers wanting to debug their applications may outnumber the number of threads available. This circumstance may occur when a thread is invoked to execute an application and the thread is suspended during debugging. Further, the thread may be suspended during debugging when the application encounters a breakpoint in the software code. Even though the thread is suspended, the thread is not available for use by any other developers. Moreover, the thread may not be released back into the pool for use by other developers until the application completes execution or the developer completes debugging their application. Accordingly, the number of threads may effectively limit the ability of multiple developers to debug their applications at the same or substantially the same time. Although it is possible for developers to eventually access and debug their applications in the hosted development environment, it is desirable for developers to have the ability to debug and access their applications when needed.
Accordingly, there is a need in the art for an improved method of debugging applications. As will be recognized from the discussion below, these and other problems in the art are addressed by various systems and methods conforming to aspects of the present invention. Before explaining the disclosed embodiments in detail, it is to be understood that the invention is not limited in its application to the details of the particular arrangements shown, because the invention is capable of other embodiments. Moreover, aspects of the invention may be set forth in different combinations and arrangements to define inventions unique in their own right. Also, the terminology used herein is for the purpose of description and not of limitation.